home *** CD-ROM | disk | FTP | other *** search
/ PC Zone 88 / PCZONE#88APR00.iso / Unreal Tournament / Mods / DecalStay.umod < prev    next >
INI File  |  2000-02-02  |  34KB  |  808 lines

  1. [Setup]
  2. Product=Decal Stay
  3. Version=200
  4. Archive=DecalStay.umod
  5. SrcPath=.
  6. MasterPath=..
  7. Requires=UnrealTournament400Requirement
  8. Group=SetupGroup
  9. Group=DecalStayGroup
  10. Group=umodIncludeFilesGroup
  11.  
  12. [UnrealTournament400Requirement]
  13. Product=UnrealTournament
  14. Version=400
  15.  
  16. [SetupGroup]
  17. Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=479,Flags=3)
  18. Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=478,Flags=3)
  19.  
  20. [DecalStayGroup]
  21. File=(Src=System\DecalStay.u,Size=30447)
  22. File=(Src=System\DecalStay.int,Size=89)
  23.  
  24. [umodIncludeFilesGroup]
  25. File=(Src=Help\DecalStay.htm,Size=2498)
  26.  
  27. [Setup]
  28. LocalProduct=Decal Stay
  29. ReadMe=Help\DecalStay.htm
  30. SetupWindowTitle=Decal Stay
  31. AutoplayWindowTitle=Decal Stay Options
  32. ProductURL=http://www.planetunreal.com/pipeline/miscmods/decalstay.htm
  33. VersionURL=http://www.planetunreal.com/pipeline/miscmods/decalstay.htm
  34. Developer=Mongo (Mike Lambert)
  35. DeveloperURL=http://www.planetunreal.com/pipeline/
  36.  
  37. [UnrealTournament400Requirement]
  38. LocalProduct=UnrealTournament
  39. ProductURL=
  40. VersionURL=
  41. Developer=
  42. DeveloperURL=
  43. ┴â*₧D±@ëÉnñ h T*à╞ñ╙Ç0K₧iσë±NoneCore
  44. DecalStaySystemSplatsEngineTexture
  45. DrawScale    SetValueMultiDecalLevelSetTextTimer AttachDecal
  46. BeginPlay bImportantUWindow
  47. SetupTextrestartDecalTickSetFontPockTex SaveValuesNotifyCreatedCreateControlUMenuCDPock    GetValueCaptureMouseTimeMultiplier    MutatorsCDDirectionalBlastCDRipperMarkCDNuclearMarkDecalLengthSlider
  48. CDBiomarkCDBigEnergyImpactDecalConfigClientWindow CDBlastMark    CDDecals DecalTickerCDUTBloodPoolCDUTBloodPool2CDImpactHoleCloseCDBoltScorchCDBloodSplatDecalConfigWindow    CDScorch    MenuHelpExecute MenuCaption    MaxValue    MinValue ClientClass CDWallCrack CheckValue    HelpText WindowTitleSetup
  49. MouseMove
  50. bAttachedDirectionalAttach LMouseDownTextGetLookAndFeelTexturePaint    LMouseUpCDEnergyImpact BeforePaintKeyDownDecalCanvasUWindowLookAndFeel    bChecked StrPropertyLastRenderedTime    RotationStructPropertyHKeyValueLevelActorOwner bDropDetail    NewValueRegion    bLowGoreUWindowHSliderControlUWindowPulldownMenuItemUWindowSmallCloseButtonUWindowSmallButtonDir
  51. DeltaTimeGetEntryLevelUWindowRootWindowUWindowCheckboxUWindowDialogControlClassPropertyUWindowWindow TimeSeconds UWindowBaseGetPlayerOwner    GetLevelSetSizeHLineCreateWindowDrawStretchedTextureSegment    ClipText DrawUpBevel PlayerPawnPTextXTextY
  52. bDisabledAlignParentWindow
  53. TextColor bMouseDownBytePropertyCaption    Location    TextSizeVectorRootObject SliderDrawX SliderDrawYPackage TrackWidth    bSlidingbNoSlidingNotifyCancelButtonUWindowDialogClientWindowStruct LookAndFeel CloseButton TextBuffer UWindowListUWindowFramedWindowUWindowButtonUMenuLabelControlUMenuFramedWindowUMenuModMenuItem    MenuItemBotpackObjectPropertyFloatProperty RemoteRoleUWindowPulldownMenupock UTBloodPoolUTBloodPool2
  54. DrawColor
  55. BlastMark
  56. WallCrackbiomarkScorchBigEnergyImpact RipperMark NuclearMark ImpactHoleEnergyImpact BoltScorch BloodSplatDirectionalBlastbStartedLifebigshockmark    biosplat
  57. biosplat2 rocketblast BloodSplat1 BloodSplat2 BloodSplat4 BloodSplat5 BloodSplat6 BloodSplat7 BloodSplat8 BloodSplat9BloodSplat10
  58. shockmark energymarkNorm impactcrack    bigblastpock0_tpock2_tpock4_t ripperblast BloodPool6 BloodPool7 BloodPool8 BloodPool9 WallCrack1 WallCrack2 BloodSplat3BoolPropertyClassColortestXWinTopCEYW ScriptTexttBRG ReturnValue    Function
  59. LevelInfo    GameInfo    WinWidthNotifyWindow
  60. WinHeightDecalHandlerDecalMultiplierTextDecalMultiplierHelpDisabledColorMultiplier IntPropertyStepUp    StepDown SliderWidthbExtendedDecalsbPermanentDecalsEnabledCheckboxPermanentCheckbox DecalLengthMultiplierLabel TrackStartticker
  61. newScorchnewScorchClass    newDecalNewTimeMultiplierbNewPermanentDecalsWinLeftö{,0                  -úqö[╨╔ï    ╟ó╩ï    ╟ó╩ï    ╟ó╩ï    ╟ó╩ç=╙╙$Ç?èVÇÄäfe"                  2)á)úä|δ[$¼íPU¼íPU¼íPU¼íPU▓o √ÄxÅÄxÅÄxÅÄxÅ╧╝╘îÄÄxÅÄxÅÄxÅÄxÅÄxÅÄxÅ£üß▒ÿç5$Ç?4$╞B@]Decal-Stay Multiplier9]ªdWhat should the default decal-stay time be multiplied by? 0 is permanent-decals, 1 is the normal decal-stay length. 2 causes them to stay twice as long, and so on.▒ky%                  6 TR▓▒┌π╠~î|.X┌î|.X┌)á)úî|.X┌)á)ú£üß▒ÿî|.X┌)á)ú£üß▒ÿ)á)ú)á)úå.ⁿ'lî|.X┌î|.X┌î|.X┌î|.X┌î|.X┌î|.X┌î|.X┌î|.X┌î|.X┌)á)ú)á)ú£üß▒ÿ£üß▒ÿ)á)ú)á)ú»╫7X├»╫7X├┤┐╨Æçî(AÇîBá@ª£'¼+m@3» Ç@£êrc(                   jc(αê~NY.√«g▄ç*CD                  "N4 ô-úqç    "█#so)                  %@{╬8-úqè⌐ßk°ï    ╟ó╩ç╙ò╤ò╨ò╥ò┴│$@?╕2ÇÆ⌡ ╓ü-a tü- ╢$- 'Y¢-ƒa«½á@½?,├(ra«½ÉA½?,├( Γé¢-ƒ
  62. û≤,╘ä▒»¢╠╚33│>éü-B
  63. ░├Ç>a▀aÇ?'         ░»¢╠╚?&aá@' a ╕òqH'                  2,.√«g▄òëⁿ═╖-úq-úq-úq-úqèTR▓èTR▓èTR▓ô;aG░Ñ⌠VµÆï    ╟ó╩-úqô;aG░Ñ⌠VµÆï    ╟ó╩ô;aG░Ñ⌠VµÆï    ╟ó╩á╙v╥mô;aG░Ñ⌠VµÆï    ╟ó╩á╙v╥má╙v╥má╙v╥má╙v╥m-úq-úqô;aG░Ñ⌠VµÆ▓o √ô;aG░ô;aG░Ñ⌠VµÆï    ╟ó╩ jc(αèTR▓èTR▓ç3]Configure &Decal Stay1]0/Make decals last a configurable length of timeÇ;Ç Ç
  64. ┤╕.QÇNÇÄÇÇ═9Ç═@ÇGÇwS#                  =°-5-úqï    ╟ó╩ç    "▐$ff&?"Bx-                  >ΘH░¬"N4 ôï    ╟ó╩çS    "├$═╠L>Dz.                  ?╒#■-úqè⌐ßk°ï    ╟ó╩ç│òΓò╘ò┴ò▐ò▌ò╚òßòαò    ▄S    "│$33│>Ç!Ç\!                  CJφ^-úqç╪$Ç@h$                  D"Nh-úqç    "▀$└?I_                  E▒┤r-úqï    ╟ó╩ç╫ò╓ò╒S    "$\ÅB>gÇÇdG7                  Hτ'-úqçS    "╒$═╠╠>|p+                  I⌠X--úqç    "┘$═╠╠>
  65. ╕T                   Kåvu∩-úqç╘X`                  LÜ╞Pi-úqç┌$ffª?%tY*                  M|w╧%@{╬8ç│ò╘ò┴ò▐${.?OÇ$Çl&                  P(m┴-úqçπÇ█Fi/                  2Rô╔>ò█ô┌0│▓o √▓o √ç6:]Decal-Stay ConfigurationñV5-éü¢-ƒ
  66. ░├?¥ Σñ 9//CDRipperMark
  67. class CDRipperMark expands CDScorch;
  68.  
  69. ┘^7E=/┘7NOφ7╞$#ó«#?&α
  70. j$₧»½¿╡╚
  71. Å$₧╡»½$╚
  72. ┼$₧¼»½¿?,╡¼»½$?,╚
  73.   ├¼»ó?,?,╥¼»ó#?,¬«₧½»¿«¼└»Ö¡└»└¡ ZÇ▌}/ "/
  74. $
  75.   ▌/ D//CDDirectionalBlast
  76. class CDDirectionalBlast extends CDScorch;
  77.  
  78. simulated function DirectionalAttach(vector Dir, vector Norm)
  79. {
  80.     SetRotation(rotator(Norm));
  81.     if( !AttachDecal(100, Dir) )    // trace 100 units ahead in direction of current rotation
  82.     {
  83.         //Log("Couldn't set decal to surface");
  84.         Destroy();
  85.     }
  86. }
  87.  
  88. , è-ü-a +ü- ╢$- ' &Çßj0Fçα
  89. ² - ≡.░Ö?,
  90. '&6',N▒Ö?,
  91. ,U&0
  92. ü:$%»Ö?√
  93. ª:$'«Ö?'√
  94. ├:$$¡√
  95. α:$#└√
  96.   ß0;@√ ;//CDNuclearMark
  97. class CDNuclearMark extends CDScorch;
  98.  
  99. ▄U    ?[ê - ▄    AYé│    ¬▓    «¬«-╜'╖p░Ö?,
  100. !&x!,É▒Ö?,
  101. *,ù*&╩é░    ¬▒    ₧»Ö?* é▒    «¬«░    «₧¿«Ö?! τbB"I╫&Aï{╞ûΦⁿ╡╥╞6╛û=, 6─û=, 6┐û=, ±╟V-6╛û=ôÉ:=ô:6╛û,Ç(,Ç6─û=ôÉ:=ô:6─û,Ç(,Ç6┐û=ôÉ:=ô:6┐û,Ç(,Çδ₧├¿?6╩?6Σ?6∞?6Ω?6╩&σ¬»├?,« A& ñ-    oS"¢-ƒ¥%-2¥º,-- ╚B#Ç? :>ç#a+P9!ü ╚B:a Ç@WèIr* 1
  102. ppDecals stay SDX normal length ╨58w!╨85 8 z//CDWallCrack
  103. class CDWallCrack extends CDScorch;
  104.  
  105. simulated function BeginPlay()
  106. {
  107.     if ( FRand() < 0.5 )
  108.         Texture = texture'Botpack.WallCrack1';
  109.     else
  110.         Texture = texture'Botpack.WallCrack2';
  111.     if ( !AttachDecal(100) )
  112.         destroy();
  113. }
  114.  
  115. ╪EF8┤ªE╪F?D«?=░?,@ l8//DecalLengthSlider
  116.  
  117. class DecalLengthSlider extends UWindowHSliderControl;
  118.  
  119. var localized string DecalMultiplierText;
  120. var localized string DecalMultiplierHelp;
  121.  
  122. var UMenuLabelControl Caption;
  123. var bool bDisabled;
  124. var int DisabledColorMultiplier;
  125.  
  126. function Notify(byte E) {
  127.  
  128.     switch(E)
  129.     {
  130.     case DE_Change:
  131.         SetupText();
  132.     }
  133.  
  134.     Super.Notify( E );
  135. }
  136.  
  137. function SetupText() {
  138.     if (Caption==None) return;
  139.  
  140.     Caption.SetText("Decals stay "$int(GetValue())$"X normal length");
  141. }
  142.  
  143. function Paint(Canvas C, float X, float Y)
  144. {
  145.     local Texture T;
  146.     local Region R;
  147.  
  148.     T = GetLookAndFeelTexture();
  149.  
  150.  
  151.     if(Text != "")
  152.     {
  153.         C.DrawColor = TextColor;
  154.         ClipText(C, TextX, TextY, Text);
  155.         C.DrawColor.R = 255;
  156.         C.DrawColor.G = 255;
  157.         C.DrawColor.B = 255;
  158.     }
  159.     
  160.     R = LookAndFeel.HLine;
  161.     if (bDisabled) {
  162.         C.DrawColor.R = (C.DrawColor.R - 128) * DisabledColorMultiplier - 128;
  163.         C.DrawColor.G = (C.DrawColor.G - 128) * DisabledColorMultiplier - 128;
  164.         C.DrawColor.B = (C.DrawColor.B - 128) * DisabledColorMultiplier - 128;
  165.     }
  166.     DrawStretchedTextureSegment( C, SliderDrawX, SliderDrawY, SliderWidth, R.H, R.X, R.Y, R.W, R.H, T);
  167.  
  168.     DrawUpBevel(C, TrackStart, SliderDrawY-4, TrackWidth, 10, T);
  169. }
  170.  
  171. function BeforePaint(Canvas C, float X, float Y)
  172. {
  173.     local float W, H;
  174.     
  175.     Super.BeforePaint(C, X, Y);
  176.     
  177.     TextSize(C, Text, W, H);
  178.     WinHeight = H+1;
  179.     
  180.     switch(Align)
  181.     {
  182.     case TA_Left:
  183.         SliderDrawX = WinWidth - SliderWidth;
  184.         TextX = 0;
  185.         break;
  186.     case TA_Right:
  187.         SliderDrawX = 0;    
  188.         TextX = WinWidth - W;
  189.         break;
  190.     case TA_Center:
  191.         SliderDrawX = (WinWidth - SliderWidth) / 2;
  192.         TextX = (WinWidth - W) / 2;
  193.         break;
  194.     }
  195.  
  196.     SliderDrawY = (WinHeight - 2) / 2;
  197.     TextY = (WinHeight - H) / 2;
  198.  
  199.     TrackStart = SliderDrawX + (SliderWidth - TrackWidth) * (loge(Value - MinValue)/loge(MaxValue - MinValue));
  200. }
  201.  
  202. function LMouseDown(float X, float Y)
  203. {
  204.     local int StepUp, StepDown;
  205.     if (bDisabled) return;
  206.  
  207.     Super.LMouseDown(X, Y);
  208.     if((X >= TrackStart) && (X <= TrackStart + TrackWidth)) {
  209.         bSliding = True;
  210.         Root.CaptureMouse();
  211.     }
  212.  
  213.     if (Value < 10) StepUp = 1;
  214.     else StepUp = 5;
  215.     if (Value > 10) StepDown = 5;
  216.     else StepDown = 1;
  217.  
  218.     if(X < TrackStart && X > SliderDrawX)
  219.     {
  220.         SetValue(Value - StepDown);
  221.     }
  222.     
  223.     if(X > TrackStart + TrackWidth && X < SliderDrawX + SliderWidth)
  224.     {
  225.         SetValue(Value + StepUp);
  226.     }
  227.     
  228. }
  229.  
  230. function MouseMove(float X, float Y)
  231. {
  232.     if (bDisabled) return;
  233.  
  234.     Super.MouseMove(X, Y);
  235.     if(bSliding && bMouseDown)
  236.     {
  237.         SetValue( 2.71828**(  (X-SliderDrawX)/(SliderWidth-TrackWidth) * loge(MaxValue - MinValue) ) + MinValue, bNoSlidingNotify);
  238.     }
  239.     else
  240.         bSliding = False;
  241. }
  242.  
  243.  
  244. function KeyDown(int Key, float X, float Y)
  245. {
  246.     local PlayerPawn P;
  247.     local int StepUp, StepDown;
  248.     
  249.     if (bDisabled) return;
  250.  
  251.     P = GetPlayerOwner();
  252.  
  253.     if (Value < 10) StepUp = 1;
  254.     else StepUp = 5;
  255.     if (Value > 10) StepDown = 5;
  256.     else StepDown = 1;
  257.         
  258.     switch (Key)
  259.     {
  260.     case P.EInputKey.IK_Left:
  261.         SetValue(Value - StepDown);
  262.  
  263.         break;
  264.     case P.EInputKey.IK_Right:
  265.         SetValue(Value + StepUp);
  266.  
  267.         break;
  268.     case P.EInputKey.IK_Home:
  269.         SetValue(MinValue);
  270.         break;
  271.     case P.EInputKey.IK_End:
  272.         SetValue(MaxValue);
  273.         break;
  274.     default:
  275.         Super.KeyDown(Key, X, Y);
  276.         break;
  277.     }
  278. }
  279.  
  280.  
  281. function LMouseUp(float X, float Y)
  282. {
  283.     if (bDisabled) return;
  284.  
  285.     Super.LMouseUp(X, Y);
  286.  
  287.     if(bNoSlidingNotify)
  288.         Notify(DE_Change);
  289. }
  290.  
  291. function float CheckValue(float Test)
  292. {
  293.     local float newValue;
  294.     newValue = Super.CheckValue(Test);
  295.     newValue = int(newValue+0.5);
  296.         if (newValue < 2) newValue = 2;
  297.     return newValue;
  298. }
  299.  
  300. ÇC//CDBigEnergyImpact
  301. class CDBigEnergyImpact extends CDScorch;
  302.  
  303. ΓPXΓ∩\CC⌠¼»╖½½?,µ¼»╖óó?, ╙]6<v~    Ç - ╙6Qvé-╜-嫬M°-@½¼»6₧»¿«└»└¡¡-▀~-╜( p3class DecalConfigClientWindow extends UWindowDialogClientWindow
  304.         config(Mutators);
  305.  
  306. var config bool bExtendedDecals;
  307. var config bool bPermanentDecals;
  308. var config int TimeMultiplier;
  309.  
  310. var localized string DecalMultiplierText;
  311. var localized string DecalMultiplierHelp;
  312.  
  313. var UWindowSmallButton CloseButton;
  314. var UWindowSmallCloseButton CancelButton;
  315. var UWindowCheckbox EnabledCheckbox;
  316. var UWindowCheckbox PermanentCheckbox;
  317. var DecalLengthSlider DecalLength;
  318. var UMenuLabelControl MultiplierLabel;
  319.  
  320. function Created()
  321. {
  322.     Super.Created();
  323.  
  324.     // Enabled box
  325.     EnabledCheckBox = UWindowCheckbox( CreateControl( class'UWindowCheckbox', 10, 10, 200, 1 ) );
  326.     EnabledCheckBox.SetText("Enable Extended Decals:");
  327.     EnabledCheckBox.SetFont(F_Normal);
  328.     EnabledCheckBox.bChecked = bExtendedDecals;
  329.     EnabledCheckBox.NotifyWindow = Self; // doesn't seem to work otherwise.
  330.  
  331.     // Permanent box
  332.     PermanentCheckBox = UWindowCheckbox( CreateControl( class'UWindowCheckbox', 10, 25, 200, 1 ) );
  333.     PermanentCheckBox.SetText("Make Decals Permanent:");
  334.     PermanentCheckBox.SetFont(F_Normal);
  335.     PermanentCheckBox.bChecked = bExtendedDecals;
  336.     PermanentCheckBox.NotifyWindow = Self; // doesn't seem to work otherwise.
  337.     PermanentCheckBox.bDisabled = true;
  338.  
  339.     // DecalLength
  340.     DecalLength = DecalLengthSlider(CreateWindow(class'DecalLengthSlider', 10, 50, 200, WinHeight-30));
  341.     DecalLength.SetValue(TimeMultiplier);
  342.     DecalLength.bDisabled = true;
  343.     
  344.     // ArenaLabel
  345.     MultiplierLabel = UMenuLabelControl(CreateWindow(class'UMenuLabelControl', 10, 75, 200, WinHeight-30));
  346.     MultiplierLabel.Align = TA_Center;
  347.     MultiplierLabel.SetFont(F_Bold);
  348.     DecalLength.Caption = MultiplierLabel;
  349.     DecalLength.SetupText();
  350.     
  351.     // Update button -- not a close button because we need to do some special stuff when
  352.     // closing via this button (ie, save configuration settings..).
  353.     CloseButton = UWindowSmallButton(CreateWindow(class'UWindowSmallButton', 94 , 90, 48, 16));
  354.     CloseButton.SetText("Update");
  355.     CloseButton.NotifyWindow = Self; // doesn't seem to work otherwise.
  356.  
  357.     // Cancel button
  358.     CancelButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', 152, 90, 48, 16));
  359.     CancelButton.SetText("Cancel");
  360. }
  361.  
  362.  
  363. function Notify( UWindowDialogControl C, byte E )
  364. {
  365.     Super.Notify( C, E );
  366.  
  367.     // an if/else system would be neater, but at least this allows for expansion..
  368.     switch(E)
  369.     {
  370.         case DE_Change:
  371.             switch(C)
  372.             {
  373.                 case EnabledCheckbox:
  374.                 case PermanentCheckbox:
  375.                 case DecalLength:
  376.                     SaveValues();
  377.                     break;
  378.             }
  379.         case DE_Click:
  380.             switch(C)
  381.             {
  382.                 case CloseButton:
  383.                     SaveValues();
  384.                     SaveConfig();
  385.                     ParentWindow.Close();
  386.                     break;
  387.             }
  388.     }
  389. }
  390.  
  391. function SaveValues () {
  392.     bExtendedDecals = EnabledCheckBox.bChecked;
  393.     bPermanentDecals = PermanentCheckBox.bChecked;
  394.     TimeMultiplier = DecalLength.GetValue();
  395.     if (!bExtendedDecals) {
  396.         PermanentCheckBox.bDisabled = true;
  397.         DecalLength.bDisabled = true;
  398.         MultiplierLabel.SetText("Decals stay their normal length");
  399.     } else {
  400.         PermanentCheckBox.bDisabled = false;
  401.         if (bPermanentDecals) {
  402.             DecalLength.bDisabled = true;
  403.             MultiplierLabel.SetText("Decals stay forever");
  404.         } else {
  405.             DecalLength.bDisabled = false;
  406.             DecalLength.SetupText();
  407.         }
  408.     }
  409.  
  410.     
  411. }
  412.  
  413. 9//CDBlastMark
  414.  
  415. class CDBlastMark extends CDScorch;
  416.  
  417. nÇ@Ç@ñ4    ze ⌐-╔a @¢-ƒ¥Æ,º,4P¥º,4cü ╚Ba ñ^ü ╚Ba \7//CDDecals
  418.  
  419. class CDDecals extends UMenuModMenuItem;
  420.  
  421. var DecalTicker ticker;
  422. var bool bExtendedDecals;
  423. var bool bPermanentDecals;
  424. var int TimeMultiplier;
  425.  
  426. function Setup() {
  427.     Super.Setup();
  428.     bExtendedDecals = class'DecalConfigClientWindow'.Default.bExtendedDecals;
  429.     TimeMultiplier = class'DecalConfigClientWindow'.Default.TimeMultiplier;
  430. }
  431.  
  432. function Execute()
  433. {
  434.     MenuItem.Owner.Root.CreateWindow(class'DecalConfigWindow', 100, 100, 200, 200,MenuItem.Owner,true);
  435.     ticker = MenuItem.Owner.getEntryLevel().spawn(class'DecalTicker');
  436.     ticker.decalhandler = self;
  437.     
  438. //    MenuItem.bChecked = !MenuItem.bChecked;
  439. //    if (MenuItem.bChecked) {
  440. //        ticker = MenuItem.Owner.getEntryLevel().spawn(class'DecalTicker');
  441. //        ticker.decalhandler = self;
  442. //    } else {
  443. //        ticker.decalhandler = none;
  444. //        ticker.destroy();
  445. //    }
  446. }
  447.  
  448. function Tick(float deltaTime) {
  449.     local Scorch scorch;
  450.     local CDScorch newScorch;
  451.     local class<CDScorch> newScorchClass;
  452.     local CDScorch newDecal;
  453.     local int NewTimeMultiplier;
  454.     local bool bNewPermanentDecals;
  455.     
  456.     bExtendedDecals = class'DecalConfigClientWindow'.Default.bExtendedDecals;
  457.     if (!bExtendedDecals) return;
  458.  
  459.  
  460.     NewTimeMultiplier = class'DecalConfigClientWindow'.Default.TimeMultiplier;
  461.     bNewPermanentDecals = class'DecalConfigClientWindow'.Default.bPermanentDecals;
  462.  
  463.     if (bNewPermanentDecals != bPermanentDecals) {
  464.         bPermanentDecals=bNewPermanentDecals;
  465.         foreach MenuItem.Owner.getLevel().allactors(class'CDScorch',newScorch) {
  466.             newScorch.disable('timer');
  467.         }
  468.     } else {
  469.         if (NewTimeMultiplier != TimeMultiplier) {
  470.             TimeMultiplier=newTimeMultiplier;
  471.             foreach MenuItem.Owner.getLevel().allactors(class'CDScorch',newScorch) {
  472.                 restartDecal(newScorch);
  473.             }
  474.         }
  475.     }
  476.  
  477.  
  478.     foreach MenuItem.Owner.getLevel().allactors(class'Scorch',scorch) {
  479.         switch (scorch.class)
  480.         {
  481.         case class'BigEnergyImpact':
  482.             newScorchClass = class'CDBigEnergyImpact';
  483.             break;
  484.         case class'Biomark':
  485.             newScorchClass = class'CDBiomark';
  486.             break;
  487.         case class'BlastMark':
  488.             newScorchClass = class'CDBlastMark';
  489.             break;
  490.         case class'BloodSplat':
  491.             newScorchClass = class'CDBloodSplat';
  492.             break;
  493.         case class'BoltScorch':
  494.             newScorchClass = class'CDBoltScorch';
  495.             break;
  496.         case class'DirectionalBlast':
  497.             newScorchClass = class'CDDirectionalBlast';
  498.             break;
  499.         case class'EnergyImpact':
  500.             newScorchClass = class'CDEnergyImpact';
  501.             break;
  502.         case class'ImpactHole':
  503.             newScorchClass = class'CDImpactHole';
  504.             break;
  505.         case class'NuclearMark':
  506.             newScorchClass = class'CDNuclearMark';
  507.             break;
  508.         case class'Pock':
  509.             newScorchClass = class'CDPock';
  510.             break;
  511.         case class'RipperMark':
  512.             newScorchClass = class'CDRipperMark';
  513.             break;
  514.         case class'UTBloodPool':
  515.             newScorchClass = class'CDUTBloodPool';
  516.             break;
  517.         case class'UTBloodPool2':
  518.             newScorchClass = class'CDUTBloodPool2';
  519.             break;
  520.         case class'WallCrack':
  521.             newScorchClass = class'CDWallCrack';
  522.             break;
  523.         }
  524.         if (newScorchClass != None) {
  525.             newDecal = MenuItem.Owner.getLevel().Spawn(newScorchClass,scorch.owner,,scorch.Location, scorch.Rotation);
  526.             scorch.destroy();
  527.             if (newDecal != None) {
  528.                 if (bPermanentDecals) {
  529.                     newDecal.disable('timer');
  530.                     newDecal.RemoteRole = ROLE_None;
  531.                 } else {
  532.                     restartDecal(newDecal);
  533.                 }
  534.             }
  535.         }
  536.     }
  537. }
  538.  
  539. function restartDecal(CDScorch newDecal) {
  540.     newDecal.enable('timer');
  541.     newDecal.bStartedLife = false;
  542.     newDecal.TimeMultiplier = TimeMultiplier;
  543.     newDecal.settimer(0.1,false);
  544. }
  545.  
  546. s//DecalTicker
  547.  
  548. class DecalTicker extends Actor;
  549.  
  550. var CDDecals DecalHandler;
  551.  
  552. function Tick (float deltaTime) {
  553.     super.Tick(deltaTime);
  554.     DecalHandler.Tick(deltaTime);
  555. }
  556. W//CDUTBloodPool
  557.  
  558. class CDUTBloodPool extends CDScorch;
  559.  
  560. var texture Splats[5];
  561.  
  562. simulated function BeginPlay()
  563. {
  564.     if ( class'GameInfo'.Default.bLowGore )
  565.     {
  566.         destroy();
  567.         return;
  568.     }
  569.     
  570.     if ( Level.bDropDetail )
  571.         Texture = splats[2 + Rand(3)];
  572.     else
  573.         Texture = splats[Rand(5)];;
  574.     if ( !AttachDecal(100) )
  575.         destroy();
  576. }
  577. Xclass CDUTBloodPool2 expands CDUTBloodPool;
  578.  
  579. simulated function Timer()
  580. {
  581.     // Check for nearby players, if none then destroy self
  582.  
  583.     if ( !bAttached )
  584.     {
  585.         Destroy();
  586.         return;
  587.     }
  588.  
  589.     if ( !bStartedLife )
  590.     {
  591.         RemoteRole = ROLE_None;
  592.         bStartedLife = true;
  593.     }
  594. }
  595.  
  596. ╤é╤
  597. .î î A AHCÇ?
  598. 
  599. Enable Extended Decals:
  600. %
  601. -╗-
  602. ╝.î î A╚AHCÇ?
  603. Make Decals Permanent:%-╗-╝-╟'.░  AHBHC»ó?, ?-'.£░ £ AûBHC»ó?,α$&.»░ »╝B┤B@BÇA
  604. Update╝3.┤░ ┤C┤B@BÇA3
  605. Cancel ╓u)?≤~╓)22
  606. G$)
  607. +
  608.  
  609. 3
  610. DG
  611.  
  612. y$)
  613. vbΘ,y
  614.  
  615.    H//CDBiomark
  616. class CDBiomark extends CDScorch;
  617.  
  618. simulated function BeginPlay()
  619. {
  620.     if ( !Level.bDropDetail && (FRand() < 0.5) )
  621.         Texture = texture'Botpack.biosplat2';
  622.     Super.BeginPlay();
  623. }
  624.  
  625. , ëgü-a bü- ╢$- 'P¢-ƒa½@@(`a½Ç@( a vZ┬
  626. -
  627. -╗--╗Dóü--╟'-''
  628. Decals stay their normal length-╟(⌠--'
  629. Decals stay forever-( ñJ    y^9ä ⌐-╔é¢-ƒ
  630. ░├33│>a ¥º,
  631. J\ü ╚Ba Z//CDScorch
  632.  
  633. class CDScorch extends Decal;
  634.  
  635. var bool bAttached, bStartedLife, bImportant;
  636. var float TimeMultiplier;
  637.  
  638. simulated function Timer()
  639. {
  640.     // Check for nearby players, if none then destroy self
  641.  
  642.     if ( !bAttached )
  643.     {
  644.         Destroy();
  645.         return;
  646.     }
  647.  
  648.     if ( !bStartedLife )
  649.     {
  650.         RemoteRole = ROLE_None;
  651.         bStartedLife = true;
  652.         if ( Level.bDropDetail )
  653.             SetTimer(5.0 * TimeMultiplier + 2 * FRand(), false);
  654.         else
  655.             SetTimer(18.0 * TimeMultiplier + 5 * FRand(), false);
  656.         return;
  657.     }
  658.     if ( Level.bDropDetail && (MultiDecalLevel < 6) )
  659.     {
  660.         if ( (Level.TimeSeconds - LastRenderedTime > 0.35)
  661.             || (!bImportant && (FRand() < 0.25)) )
  662.             Destroy();
  663.         else
  664.         {
  665.             SetTimer(1.0, true);
  666.             return;
  667.         }
  668.     }
  669.     else if ( Level.TimeSeconds - LastRenderedTime < 1 )
  670.     {
  671.         SetTimer(5.0, true);
  672.         return;
  673.     }
  674.     Destroy();
  675. }
  676.  
  677.  
  678. L//CDImpactHole
  679.  
  680. class CDImpactHole extends CDScorch;
  681.  
  682. simulated function BeginPlay()
  683. {
  684.     if ( !AttachDecal(100) )
  685.         destroy();
  686. }
  687.  
  688. aÇ@┌1; ║2┌- -  ≈~2}àíú╖.░ R╚B╚BHCHCíú'1íúπa  15 ─A('%- -#ü- + - -¼≤----/íú║a0 ¿v! 10  ¢++/íú║a0 ■10/íú║a0 á " ╞
  689. Q ╠ Dr
  690. g ╦ =r
  691. } ╔ Pr
  692. ô ■ ?r
  693. ⌐ ┬ >r
  694. ┐ · Lr
  695. ╒ √ "r
  696. δ ┼ Ir
  697.  ╩ Cr
  698.  ² Er
  699. - ═ Kr
  700. C └ %r
  701. Y ╬ Mr
  702. o   Hr
  703.   !w*íú║3a ∙   ┴  ° a!w*-v! ╢$!10  Çeclass CDBoltScorch expands CDEnergyImpact;
  704.  
  705. simulated function Timer()
  706. {
  707.     // Check for nearby players, if none then destroy self
  708.  
  709.     if ( !bAttached )
  710.     {
  711.         Destroy();
  712.         return;
  713.     }
  714.  
  715.     if ( !bStartedLife )
  716.     {
  717.         RemoteRole = ROLE_None;
  718.         bStartedLife = true;
  719.         if ( Level.bDropDetail )
  720.             SetTimer(3 * TimeMultiplier, false);
  721.         else
  722.             SetTimer(4 * TimeMultiplier, false);
  723.         return;
  724.     }
  725.     Destroy();
  726. }
  727.  
  728. ?//CDEnergyImpact
  729.  
  730. class CDEnergyImpact extends CDScorch;
  731.  
  732. ~//CDBloodSplat
  733.  
  734. class CDBloodSplat extends CDScorch;
  735.  
  736. var texture Splats[10];
  737.  
  738. simulated function BeginPlay()
  739. {
  740.     if ( class'GameInfo'.Default.bLowGore || (Level.bDropDetail && (FRand() < 0.35)) )
  741.     {
  742.         destroy();
  743.         return;
  744.     }
  745.     Texture = splats[Rand(10)];;
  746.     if ( !AttachDecal(100) )
  747.         destroy();
  748.  
  749. }
  750.  
  751. ╫[<C⌐² . - ╫<G,-▀$ Vclass DecalConfigWindow extends UMenuFramedWindow;
  752.  
  753.  
  754. function Created()
  755. {
  756.     Super.Created();
  757.     SetSize(220, 130);
  758.     WinLeft = (Root.WinWidth - WinWidth) / 2;
  759.     WinTop = (Root.WinHeight - WinHeight) / 2;
  760. }
  761.  
  762. ñZ:░├?¥ ╒%¥ ╧8ü ╚Ba @|NJu! - (?    a═╠╠=( {//CDPock
  763.  
  764. class CDPock extends CDScorch;
  765.  
  766. var() texture PockTex[3];
  767.  
  768. simulated function BeginPlay()
  769. {
  770.     if ( Level.bDropDetail )
  771.         Texture = PockTex[0];
  772.     else
  773.         Texture = PockTex[Rand(3)];
  774.     bAttached = AttachDecal(100, vect(0,0,1));
  775. }
  776.  
  777. AAAF    YARF    dF■   ~F²   SF■   UF■   FF²   VF    aAF²   HF■   SF■   JF■   TF    bF    ZF²   GF≤   PN≥   ZF■   EG∙   GTⁿ   QF■   _S°   RF≤   NS°   Tⁿ   E⌡   UF√   ^Sδ   QT·   ZSφ   TU∞   F    VG┘   WF    fTⁿ   bF²   WTⁿ   iT·   XF²   oTⁿ   5Tⁿ   BF    \U·   kF    FF    `√   lF    [Tε   qx°   US·   }F²   F■   KU·   hE⌠   JSε   YEⁿ   CxΦ   RxΦ   QTⁿ   4√   nF    MTⁿ   @xΦ   SF■   NKε   @E╛   sT∞   LE╫   X_┌   OF    LT⌡   eG∙   |F■   xF    IU°   U·   Tε   rUⁿ   <√   D√   BU╧   Uⁿ   CUⁿ   8Uⁿ   EUδ   ;F≤   OUⁿ   ?Uε   √   oEⁿ   Dxε   tUⁿ   FU╡   U·   __┌   IU·   nT·   JUⁿ   BNε   vS·   u_┌   NU·   l_┌   MU·   {E·   wU·   iU·   gS·   HF    K_∞       T·   pU°    F■   cUδ   2N°   MS°   TF√   fF√   cU·   mF√   WF√   eF√   \F√   XN°   zF√   d√   vUÄ   F√   bc∙   FN▒   j√   qF√   [F√   aF√   ]F√   _F√   `F√   Y√   C√   A√   @√   √   ~√   }√   |√   {√   z√   y√   x√   f√   u√   t√   p√   i√   h√   s√   r√   m√   k√   jö0F\=÷Çlb?Å^Kp?ä"A~?▒%eFÅgdLÅfqLùs ~Læ]IJMÅeWMùgdMÅÇ^qMùc ~M┼^RJNÅhWNæeV dNÅ[ppNÅÇm}Næ JOÜVOÜ. cOÅIoOù= |OÅÇkHPÅêmUPù.c bPù.d nPùd zPÅyFQÜ[a SQùÇo _Qê(`kQÜ]` KSDaWSæUO xTæUN DU)SPUÅ^PcWÜ[` pWÜ^ |WÅvKHXÜ]a UXÜÇn aXë⌡ xmXÅEe\ò'_r\╬WLQeÜ[P ^eÅ.jje╬vLweÅEDfÅ%QfÅ [^fæjIkfÅUKxfæc^ Fg┼`wRg┼`]`gæ[IngæàI{g#pHh"-sxi.tkkæ[M _næ]M knù wn!aCo$gdp~KræeHItæàM Vt7kbt+hMvÅ?uw [Bxb]y%*pzæUIo|æUM ||&[H}æjM c~█/Mo~ëñ=@|ÇÉKO4C|üë┘E_éæ^I^åë▌2kåÉLO4O]çë,M :lîæ^M fìëßFIrìÉCO4E{Éë▄?D@ÆëτB~DòëñETBÜëL>3V¢╣] I£ëWU£ë╨ -l¥ÉHO4EY₧ë╪8K^óÉO4w8iúæeT `▄ÉDO4Nl▄ëΓRXz▌ë╙<pR▀ÉO4{3BßÉPO4C}ö╣\@û╣] Mûëñ%dYûëñI+}ùÉ.O4g7hÿÉ O4~O╨É%O4bM╙ÉMO4co╪ë╤VR▌ë╓qhΣÉ=O4SYµë,> hlΘëaTδëñ?euεÉO4eZ≡ÉIO4W²╣\VÇë┌.;8cÇë≈.2x[üë─.jSâæÇ^ }ïÉ>O4pIîÉ"O4IyÆÉ?O4IBöë╫C;KÖÉRO4aFÜëñHFg¥ë.Lm₧ÉEO4Fyƒ[Public]
  778. Object=(Name=DecalStay.CDDecals,Class=Class,MetaClass=UMenu.UMenuModMenuItem)
  779. <html>
  780. <head>
  781. <title>DecalStay Readme</title>
  782. </head>
  783. <body bgcolor="#fffff0">
  784. <font face="Comic Sans MS">
  785. <h2>DecalStay</h2>
  786. <h3>Information</h3>
  787. <table border=0>
  788. <tr><th align=left>Title:</th><td>DecalStay</td></tr>
  789. <tr><th align=left>Date Created:</th><td>November 25, 1999</td></tr>
  790. <tr><th align=left>Author:</th><td><a href="mailto:mongo@planetunreal.com">Mike Lambert (Mongo)</a></td></tr>
  791. <tr><th align=left>Homepage:</th><td><a href="http://www.planetunreal.com/pipeline">Pipeline Productions</a></td></tr>
  792. <tr><th align=left>Description:</th><td>Configure how long your dcals remain!.</td></tr>
  793. </table>
  794. <h3>Overview</h3>
  795. DecalStay makes all decals last anywhere from 2 times there normal length to ninety-nine times their normal length to forever. This allows for deathmatch games that STILL look like battles have actually taken place, thirty minutes after they've occured. It also allows for some incredible pulse-cannon alt-fire graffiti, since those decals now stay much longer.
  796. In addition, this mod does not require any action on the part of the server. This mod can be played on ANY server, in ANY game. You can go online immediately, and play with DecalStay on any server you choose to. It's all done on the client, with no intervention of the server.
  797. <h3>Playing</h3>
  798. Go to the Mod Menu in the UT MenuBar. Select "Configure Decals." On that screen, you may turn on the special decals, or go back to regular decals. If you decide to configure your decals, you have the option of making them all permanent (which can get pretty slow towards the end of a 30-minute game unless you have a massive computer), or select some multiplier setting that makes decals last X times longer than they normally would.
  799. <p>
  800. This window also allows you to set the characteristics of decals that already exist in the level. If you've chosen "Permanent Decals", and are now noticing a slowdown in your system, you can select a multiplier, or just turn decals off altogether, and the game will slowly get better as more decals "expire." Have fun experimenting!
  801. <h3>Copyright</h3>
  802. Copyright (c) 1999, Mike Lambert<p>
  803. You are NOT allowed to commercially exploit this modification, i.e. put it on a CD or any other electronic medium that is sold for money without my explicit permission!<p>
  804. You MAY distribute this level through any electronic network (internet, FIDO, local BBS etc.), provided you include this file and leave the archive intact.<p>
  805. </font>
  806. </body>
  807. </html>
  808. System\Manifest.inijSystem\Manifest.intj▐System\DecalStay.uH∩vSystem\DecalStay.int7{YHelp\DecalStay.htmÉ{┬    ú┼πƒRà åöÄδè